
/*
 *Universidad del Valle de Guatemala
 * Algoritmos y estructuras de datos
 * Hoja de Trabajo # 1 
 * @author Diego Bran 08068
 * @author Juan Pablo Argueta 11033
 * 
 */
public class RadioJ implements Radio{
    private boolean estadoRadio, modoAM, modoFM;
    private float estacion;
    private float[] listaEstacion;
    
    /**
     * Método constructor, no recibe nada ni regresa nada, solo instancia un nuevo radio
     */
    public RadioJ()
    {
        estacion = (float) FM_MIN;
        modoFM = true;
        modoAM = false;
        estadoRadio = false;
        listaEstacion = new float[13];
        for(int i=0; i<12; i++){
           listaEstacion[i] = 0;
       }
    }
    
    /**
     * Método que enciende o apaga la Radio según su estado actual.
     */
    @Override
    public void onOff()
    {
        if (estadoRadio){
            estadoRadio = false;
        } else {
            estadoRadio = true;
        }
        return;
    }
    
    /**
     * Método que cambia la Banda en la que esta configurada la radio.
     */
    @Override
    public void cambiarBanda()
    {
        if (modoFM){
            modoFM = false;
            modoAM = true;
            estacion = AM_MIN;
        } else {
            modoAM = false;
            modoFM = true;
            estacion = FM_MIN;
        }
        return;
    }
    
    /**
     * Método que cambia la Frecuencia actual de la Radio.
     */
    @Override
    public void cambiarFrecuencia()
    {
        if (modoFM){
            if(estacion==FM_MAX){
                estacion = FM_MIN;
            } else {
                estacion += FM_D;
            }
        } else {
            if (estacion==AM_MAX){
                estacion = AM_MAX;
            } else {
                estacion += AM_D;
            }
        }
        return;
    }
    
    /**
     * Método que guarda en memoria una estación.
     * @param boton Estación a Guardar.
     */
    @Override
    public void guardarEstacion(int boton)
    {
        listaEstacion[boton] = estacion;
        return;
    }
    
    /**
     * Método que selecciona una estación guardada en memoria.
     * @param boton Estación seleccionada.
     */
    @Override
    public void seleccionarEstacion(int boton)
    {
        if (listaEstacion[boton]!=0){
            if (((listaEstacion[boton]>FM_MAX)&(modoFM))||((listaEstacion[boton]<AM_MIN)&(modoAM))){
                this.cambiarBanda();
            }
            estacion = listaEstacion[boton];
        }
        return;
    }
    
    /**
     * 
     * @return Frecuencia seleccionada actualmente
     */
    @Override
    public float getFrecuencia()
    {
        return estacion;
    }
    
    /**
     * 
     * @return True si el radio esta¡ encendido, false de lo contrario.
     */
    @Override
    public boolean isOn()
    {
        return estadoRadio;
    }
    
    /**
     * 
     * @return True si la banda seleccionada es AM, False de lo contrario
     */
    @Override
    public boolean isAM()
    {
        return modoAM;
    }
    
    /**
     * 
     * @return True si la banda seleccionada es FM, False de lo contrario
     */
    @Override
    public boolean isFM()
    {
        return modoFM;
    }
}
